/**
 * N个食物，每个食物有甜度与咸度
 * 问在甜度不超过X和咸度不超过Y的情况下最多吃多少个食物
 * N在80，X和Y在10000
 * 
 * 显然要DP，令Dijk是到i为止甜度用了X咸度用了Y的最多数量
 * Dijk = max(D[i - 1][j][k], 1 + D[i - 1][j - ai][k - bi])
 * 但是X和Y比较大，会超。
 * 
 * 改变规划的状态与目标，令Dijk是到i为止吃了j个甜度用了k的最小咸度
 * Dijk = min(D[i - 1][j][k], bi + D[i - 1][j - 1][k - ai])
 * 最后检查一下D[N]即可
 * 
 * 实现的时候用刷表，当Dijk有意义时：
 * Dijk对D[i+1][j][k]有贡献，对D[i+1][j+1][k+ai]有贡献
 */
#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace std;

using llt = long long;
using vi = vector<int>;
using vll = vector<llt>;
using pii = pair<int, int>;
using pll = pair<llt, llt>;

vector<pii> A;
int N;
int X, Y;
vector<vector<vector<int>>> D;

void chkmin(int & a, int b){
    if(-1 == b) return;
    if(-1 == a or b < a) a = b;
    return;
}

int chkadd(int a, int b){
    if(-1 == a or -1 == b) return -1;
    return a + b;
}

int proc(){
    D.assign(N + 1, vector<vector<int>>(N + 1, vector<int>(X + 1, -1)));
    
    D[0][0][0] = 0;
    for(int i=0;i<N;++i){
        const auto & d = D[i];
        auto & nxt = D[i + 1];
        int tian = A[i + 1].first;
        int xian = A[i + 1].second;
        for(int j=0;j<=N;++j){
            for(int x=0;x<=X;++x){
                if(-1 != d[j][x]){
                    chkmin(nxt[j][x], d[j][x]);
                    if(j < N and x + tian <= X){
                        chkmin(nxt[j + 1][x + tian], d[j][x] + xian);
                    }                    
                }
            }
        }
    }

#ifndef ONLINE_JUDGE
    for(int i=1;i<=N;++i){
        cout << "eaten " << i << ": "; 
        for(int x=0;x<=X;++x){
            if(D[N][i][x] != -1){
                cout << "(" << x << ", " << D[N][i][x] << ")";
            }
        }
        cout << endl;
    }
#endif

    const auto & d = D[N];
    for(int i=N;i>0;--i){
        for(int x=0;x<=X;++x){
            if(d[i][x] != -1 and d[i][x] <= Y){
                return i == N ? N : i + 1;
            }
        }
    }
    return 1;
}

void work(){
    cin >> N >> X >> Y;
    A.assign(N + 1, {});
    for(int i=1;i<=N;++i)cin >> A[i].first >> A[i].second;
    cout << proc() << endl;
    return;
}


int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);	
    int nofkase = 1;
	// cin >> nofkase;
	while(nofkase--) work();
	return 0;
}